package com.hksj.data.vo;

/**
 * @author zengke
 * @version 1.0
 * @see com.hksj.data.vo.DeviceMetadataVO
 * @since 2025/05/27 11:07
 */

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 解析后的设备物模型
 */

@Data
public class DeviceMetadataVO {

    /**
     * 功能集合
     */
    private List<Functions> functions = new ArrayList<>();

    /**
     * 属性集合
     */
    private List<Properties> properties = new ArrayList<>();

    /**
     * 事件集合
     */
    private List<Events> events = new ArrayList<>();

    /**
     * 标签集合
     */
    private List<Tags> tags = new ArrayList<>();

    public class Functions{

    }

    public class Events{

    }

    @Data
    public class Tags{

        /**
         * 标签id
         */
        private String id;

        /**
         * 标签名称
         */
        private String name;

        /**
         * 标签说明
         * 若配置json形式{}会作为属性报警阈值写入
         */
        private String description;

        /**
         * 值类型
         */
        private ValueType valueType;

        /**
         * 额外扩展字段
         */
        private Expands expands;

        @Data
        public class ValueType{

            /**
             * 四舍五入方式
             */
            private String round;

            /**
             * 数据类型
             */
            private String type;

        }

        @Data
        public class Expands{

            /**
             * 类型 读写["read","write"]等
             */
            private List<String> type;
        }
    }

    @Data
    public class Properties{

        //属性标识id
        private String id;

        //属性标识名称
        private String name;

        //值的类型
        private ValueType valueType;

        //扩展字段
        private Expands expands;


        @Data
        public class ValueType{

            //单位
            private String unit;

            //保留方式 half_up、half_down 等
            private String round;

            //精度
            private String scale;

            //属性类型 int、float等
            private String type;
        }

        @Data
        public class Expands{

            //读写上报类型 read、write、report组合
            private List<String> type;

            //数据来源 设备、手动
            private String source;
        }
    }
}
